
package model;

import java.util.Vector;
import util.Constantes;

/**
 *
 * @author Beto
 */
public class Rede {

    private Vector<Camada> camadas;
    private int[] topologia;

    public Rede(int[] topologia) {
        this.topologia = topologia;
        camadas = new Vector<Camada>();
        inicializarRede();
    }

    public Vector<Camada> getCamadas() {
        return camadas;
    }

    public int[] getTopologia() {
        return topologia;
    }

    private void inicializarRede() {
        Camada camadaEntrada = new Camada();

        // CAMADA DE ENTRADA
        for(int i = 0; i < topologia[0]; i++) {
            Neuronio neuronio = new Neuronio();
            neuronio.setPesos(gerarVetorPesosAleatorios(Constantes.QTD_PARAMETROS));
            camadaEntrada.addNeuronio(neuronio);
        }
        camadas.add(camadaEntrada);

        // PROXIMAS CAMADAS
        for(int i = 0; i < topologia.length-1; i++) {
            Camada camadaPosterior = new Camada();

            for(int j = 0; j < topologia[i+1]; j++) {
                Neuronio neuronio = new Neuronio();
                neuronio.setPesos(gerarVetorPesosAleatorios(topologia[i]));
                camadaPosterior.addNeuronio(neuronio);
            }
            camadas.add(camadaPosterior);
        }
    }

    private double[] gerarVetorPesosAleatorios(int qntPesos) {
        double aux[] = new double[qntPesos];

        for(int i = 0; i < aux.length; i++)
            aux[i] = 0.5 * Math.random();

        return aux;
    }

}
